// 练习一
/*
    使用fp.add(x,y)和fp。map(f,x)创建一个能让 functor 里的值增加的函数 ex1
*/

//app.js

const fp = require('lodash/fp')

const { Maybe, Container } = require('./support.js')
let maybe = Maybe.of([5, 6, 1])

let ex1 = (arr, number) => {
    // 你需要实现的函数...

    // 加几
    let add = function (number) {
        return function (value) {
            return fp.add(number, value)
        }
    }

    let addFun = add(number)

    //注意fp的回调函数在前面
    return fp.map(addFun, arr)
}
console.log(ex1(maybe._value, 1));

// 练习二
// 实现一个函数ex2, 能够使用fp.first获取列表的第一个元素
// app.js

// const fp = require('lodash/fp')
// const { Maybe , Container } = require('./support.js')

let xs = Container.of(['do', 'ray', 'me', 'fa', 'so', 'la', 'ti', 'do'])

let ex2 = () => {
    // 你需要实现的函数。。。

    return fp.first(xs._value)
}

console.log(ex2());

//练习三
//实现一个函数 ex3，使用 safeProp 和 fp.first 找到 user 的名字的首字母

// const fp = require('lodash/fp')
// const { Maybe , Container } = require('./support.js')

let safeProp = fp.curry(function (x, o) {
    return Maybe.of(o[x])
})
let user = { id: 2, name: 'Albert' }
let ex3 = () => {
    // 你需要实现的函数。。。

    return fp.first(safeProp('name')(user)._value)

}

console.log(ex3());

//练习四
//使用 Maybe 重写 ex4，不要有if语句
//app.js

// const fp = require('lodash/fp')
// const { Maybe , Container } = require('./support.js')



let maybe1 = Maybe.of([0.1, 6, 1, 0.03])
let ex4 = function (maybe) {
    // if (n) {
    //     return parseInt(n)
    // }
    let arr = []

    maybe.map((item) => {
        item.forEach((item) => {
            item ? arr.push(parseInt(item)) : ''
        })
    })
    return arr
}

console.log(ex4(maybe1));